package com.qdlc.p2p.biz.service;

import com.qdlc.p2p.common.core.ReturnResult;
import com.qdlc.p2p.dal.common.model.jpa.PageDataList;
import com.qdlc.p2p.dal.dto.AccountRecharge;
import com.qdlc.p2p.dal.dto.Operator;
import com.qdlc.p2p.dal.dto.User;
import com.qdlc.p2p.dal.model.AccountRechargeModel;

/**
 * 充值
 *
 * @author wuaj
 * @version 1.1.0.0
 * @since 2016年3月17日
 */
public interface AccountRechargeService {

    /**
     * 新增充值记录，但是Account记录并未到账
     *
     * @param accountRecharge
     * @return
     */
    AccountRecharge add(AccountRecharge accountRecharge);

    /**
     * 获取充值记录列表，含分页
     *
     * @param userId
     * @param model
     * @return
     */
    PageDataList<AccountRechargeModel> list(long userId, AccountRechargeModel model);

    /**
     * 成功充值信息
     *
     * @param userId
     * @return
     */
    AccountRechargeModel getRechargeSummary(long userId);

    /**
     * 充值列表
     *
     * @param model
     * @return
     */
    PageDataList<AccountRechargeModel> list(AccountRechargeModel model);

    /**
     * 等待审核的充值
     *
     * @param status
     * @return
     */
    int count(int status);

    /**
     * @param id
     * @return
     */
    AccountRecharge find(long id);

    /**
     * 充值用户数
     *
     * @return
     */
    int rechargedUserCount();

    /**
     * 投资人累计充值金额总和
     *
     * @return
     */
    double rechargedAllMoney();

    /**
     * 根据订单号获取到充值对象
     *
     * @param order
     * @return
     */
    AccountRecharge getRechargeByOrder(String order);

    /**
     * 系统充值
     *
     * @param tradeNo  流水号
     * @param amount   充值金额
     * @param toUser   充值用户
     * @param operator 操作员
     */
    void systemRecharge(String tradeNo, double amount, User toUser, Operator operator);

    /**
     * 今日累计充值金额总和
     */
    double todayRechargedAllMoney();

    /**
     * 更改充值状态
     */
    void updateRechargeStatus(int interval, int status);

    /**
     * [网银充值] 检测前置条件
     * @param user
     * @return
     * @throws Exception
     */
    ReturnResult rechargePreCondition(User user, double money);

    /**
     * [网银充值] 充值
     * @param user
     * @param money
     * @return
     * @author linya
     */
	ReturnResult doRecharge(User user, double money);

    /**
     * 根据时间获取充值总数
     * @param date
     */
    double getRechargeAmountByDate(String date);

    /**
     * 投资人累计充值金额总和
     *
     * @param
     * @return
     */
    double rechargedAllMomeny();
	
}
